/**
 * 将取值的时间表达式转为日期
 * @param expression
 * @param format
 * @returns {Date|*}
 */
export function toDate(expression, format) {
  // 解析表达式 ： 格式：Now(+-yy, +-MM, +-dd, +-hh, +-mm, +-ss)

  // 获取参数列表
  const regex = /\((.+?)\)/g
  const options = expression.match(regex)
  if (options.length === 0) {
    return false
  }
  let params = options[0]
  params = params.slice(1, params.length - 1)

  // 拆分参数列表
  const paramsArray = params.split(',')
  if (paramsArray.length !== 6) {
    return false
  }
  const year = parseInt(paramsArray[0])
  const month = parseInt(paramsArray[1])
  const day = parseInt(paramsArray[2])
  const hour = parseInt(paramsArray[3])
  const minute = parseInt(paramsArray[4])
  const second = parseInt(paramsArray[5])

  // 生成时间
  const date = new Date()
  date.setFullYear(date.getFullYear() + year)
  date.setMonth(date.getMonth() + month)
  date.setDate(date.getDate() + day)
  date.setHours(date.getHours() + hour)
  date.setMinutes(date.getMinutes() + minute)
  date.setSeconds(date.getSeconds() + second)

  if (format === '') {
    // 如果没有 format ，则为时间日期格式
    return date
  } else {
    // 如果有 format ，则转为字符串格式
    // return dateFormat(date, 'yyyy-MM-dd HH:mm:ss')
    return dateFormat(date, format)
  }
}

/**
 * 日期格式化
 * @param date            日期
 * @param fmt             格式
 * @returns {*}
 */
export function dateFormat(date, fmt) {
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  const o = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'H+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (const k in o) {
    if (new RegExp(`(${k})`).test(fmt)) {
      const str = o[k] + ''
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
    }
  }
  return fmt
}

/**
 * 获取时间日期
 * @param dateString      日期日期字符串
 * @param fmt             格式
 * @returns {*}
 */
export function getDate(dateString) {
  const date = new Date(dateString)
  return date
}

/**
 * 日期格式化
 * @param dateString      日期
 * @param toFmt           格式
 * @returns {*}
 */
export function reFormat(dateString, toFmt) {
  const date = getDate(dateString)
  return dateFormat(date, toFmt)
}

/**
 * 时间日期格式缺位补零
 * @param str
 * @returns {string}
 */
function padLeftZero(str) {
  return ('00' + str).substr(str.length)
}
// 获取当前时间 传new Date()
export function nowDate(timestamp, length) {
  let date
  if (length >= 13) {
    date = new Date(timestamp)
  } else {
    date = new Date(timestamp * 1000)// 时间戳为10位需*1000，时间戳为13位的话不需乘1000
  }

  var Y = date.getFullYear() + '-'
  var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
  var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' '
  var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':'
  var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':'
  var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
  return Y + M + D + h + m + s
}
